package com.jinwei.qunguanjia.system.service;

import com.jinwei.qunguanjia.common.core.page.PageDataInfo;
import com.jinwei.qunguanjia.system.dto.SysRoleDTO;

import java.util.List;
import java.util.Set;

public interface SysRoleService {
    /**
     * 保存接口
     * @param sysRoleDTO 实体对象
     */
    void save(SysRoleDTO sysRoleDTO);

    /**
     * 删除接口
     * @param ids 主键列表
     */
    void remove(List<String> ids);

    /**
     *  根据主键id修改接口
     * @param sysRoleDTO 实体对象
     */
    Integer update(SysRoleDTO sysRoleDTO);
    /**
     *  根据主键id修改状态接口
     * @param sysRoleDTO 实体对象
     */
    void updateRoleStatus(SysRoleDTO sysRoleDTO);

    /**
     *  根据id获取单条详细
     * @param id 主键
     * @return SysRoleDTO对象
     */
    SysRoleDTO get(String id);

    /**
     *  根据查询条件获取单条详细
     * @param sysRoleDTO 对象
     * @return SysRoleDTO对象
     */
    SysRoleDTO get(SysRoleDTO sysRoleDTO) throws IllegalAccessException;

    /**
     *  根据查询条件获取列表
     * @param sysRoleDTO 实体对象
     * @return list结果
     */
    List<SysRoleDTO> list(SysRoleDTO sysRoleDTO) throws IllegalAccessException;
    /**
     *  根据查询条件获取列表
     * @param sysRoleDTO 实体对象
     * @return list结果
     */
    PageDataInfo<SysRoleDTO> listPage(SysRoleDTO sysRoleDTO);
    /**
     * 根据用户ID查询角色权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    Set<String> listRolePermissionByUserId(String userId);

    /**
     * 校验角色名称是否唯一
     *
     * @param sysRoleDTO 角色信息
     * @return 结果
     */
    String checkRoleNameUnique(SysRoleDTO sysRoleDTO) throws IllegalAccessException;

    /**
     * 校验角色权限是否唯一
     *
     * @param sysRoleDTO 角色信息
     * @return 结果
     */
    String checkRoleKeyUnique(SysRoleDTO sysRoleDTO) throws IllegalAccessException;

    /**
     * 校验角色是否允许操作
     *
     * @param roleId 角色id
     */
    void checkRoleAllowed(String roleId);

    /**
     * 校验角色是否有数据权限
     *
     * @param roleId 角色id
     */
    void checkRoleDataScope(String roleId);

    /**
     * 修改数据权限信息
     *
     * @param sysRoleDTO 角色信息
     */
    void updateDataScope(SysRoleDTO sysRoleDTO);
    /**
     * 取消授权用户角色
     *
     * @param roleId 角色ID
     * @param userId 需要取消授权的用户数据ID
     */
    void removeAuthUser(String roleId, String userId);
    /**
     * 批量取消授权用户角色
     *
     * @param roleId 角色ID
     * @param userIds 需要取消授权的用户数据ID
     */
    void removeAuthUsers(String roleId, String[] userIds);

    /**
     * 批量选择授权用户角色
     *
     * @param roleId 角色ID
     * @param userIds 需要删除的用户数据ID
     */
    void saveAuthUsers(String roleId, String[] userIds);
}
